1 *SPEECH-COMPOSITE DRIVER 

2 * 

3 ORG $6D00

4 * 

5 TABPTR EQU $F9 ;DATA POINTER

6 OUTPTR EQU $FB ;START OF DATA

POINTER

7 ENDPTR EQU $FD ;END OF DATA

POINTER

8 BUSY EQU $FF ;BUSY FLAG

9 IRQL EQU $03FE ;INTERRUPT VECTOR,

LOW BYTE

 

A-16

 

APPENDIX F Assembly Language Program Listings (continued)

 

10 IRQH EQU $03FF ;INTERRUPT VECTOR,

HIGH BYTE

11 BASE EQU $C440 ;FIRST SPEECH CHIP

12 DURPHON EQU BASE ;REGISTER 0 OF

SPEECH CHIP

13 INFLECT EQU BASE+$01 ;REGISTER 1 OF

SPEECH CHIP

14 RATEINF EQU BASE+$02 ;REGISTER 2 OF

SPEECH CHIP

15 CTTRAMP EQU BASE+$03 ;REGISTER 3 OF

SPEECH CHIP

16 FILFREQ EQU BASE+$04 ;REGISTER 4 OF

SPEECH CHIP

17 PCR EQU $C0C ;PERIPHERAL

CONTROL

REG-6522

18 IFR EQU $C40D ;INTERRUPT FLAG

REG-6522

19 PCR EQU $C48C ;INTERRUPT 

ENABLE

REG-6522

20 IFR EQU $C48D 

21 IER EQU $C48E 

22 *SETUP ROUTINE 

23 * 

6D00: 78 24 SEI ;DISABLE INTERRUPTS

6D01: A9 4D 25 LDA #<INTERR ;SET INTERRUPT

VECTOR

6D03: 8D FE 03 26 STA IRQL ;TO POINT TO

INTERRUPT

6D06: A9 6D 27 LDA #>INTERR ;SERVICE ROUTINE

 

A-17

APPENDIX F Assembly Language Program Listings (continued)

 

 

 

6D08: 8D FF 03 28 STA IRQH

29 * 

6D0B: AS FA 30 LDA TABPTR+1 ;GET HIGH ADDRESS

OF DATA

6D0D: 85 FC 31 STA OUTPTR+1 ;STORE IN WORK

POINTER

6D0F: A6 F9 32 LDX TABPTR ;GET LOW ADDRESS

OF DATA

6D11: E8 33 INX ;INCREMENT TWICE

6D12: E8 34 INX ;TO SKIP OVER

LENGTH BYTES

6D13: D0 02 35 BNE CONT ;CHECK FOR 

PAGE

BOUNDARY

6D15: E6 FC 36 INC OUTPTR+1

6D17: 86 FB 37 CONT STX OUTPTR ;STORE LOW 

BYTE

38 * 

6D19: A0 01 39 LDY #$01

6D1B: B1 F9 40 LDA (TABPTR),Y ;GET HIGH LENGTH 

BYTE

6D1D: 18 41 CLC

6D1E: 65 FA 42 ADC TABPTR+1 ;AND ADD TO BASE

ADDRESS

6D20: 85 FE 43 STA ENDPTR+1 ;STORE END ADDRESS

6D22: 88 44 DEY

6D23: 81 F9 45 LDA (TABPRT),Y ;GET LOW LENGTH

BYTE

 

 

A-18

APPENDIX F Assembly Language Program Listings (continued)

 

6D25: 18 46 CLC

6D26: 65 F9 47 ADC TABPTR ;AND ADD TO BASE

ADDRESS

6D28: 90 02 48 BCC CONT1 ;CHECK FOR PAGE

BOUNDARY

6D2A: E6 FE 49 INC ENDPTR+1

6D2C: 85 FD 50 CONT1 STA ENDPTR ;STORE END ADDRESS

51 * 

6D2E: A9 FF 52 CONT5 LDA #$FF ;SET BUSY FLAG

6D30: 85 FF 53 STA BUSY ;AND SET PERIPHERAL

CONTROL

6D32: A9 0C 54 LDA #$0C ;REGISTER TO

RECOGNIZE

6D34: 8D 0C C4 55 STA PCR ;SIGNAL FROM SPEECH

CHIP

6D37: A9 80 56 LDA #$80 ;RAISE CTRL BIT IN

REGISTER 3

6D39: 8D 23 C4 57 STA CTTRAMP

6D3C: A9 C0 58 LDA #$C0 ;SET TRANSITIONED

INFLECTION

6D3E: 8D 20 C4 59 STA DURPHON ;MODE IN REGISTER 0

6D41: A9 70 60 LDA #$70 ;LOWER CTRL BIT

6D43: 8D 23 C4 61 STA CTTRAMP

6D46: A9 82 62 LDA #$82 ;ENABLE 6522

INTERRUPTS

6D48: 8D 0E C4 63 STA IER

6D48: 58 64 CLI ;CLEAR INTERRUPT

MASK

 

A-19

APPENDIX F Assembly Language Program Listings (continued)

 

6D4C: 60 65 RTS ;RETURN TO CALLER

66 * 

67 *INTERRUPT ROUTINE

6D4D: 8A 68 INTERR TXA ;SAVE REGISTERS

6D4E: 48 69 PHA

6D4F: 98 70 TYA

6D50: 48 71 PHA

6D51: A9 02 72 LDA #$02 ;CLEAR INTERRUPT

FLAG

6D53: 8D 0D C4 73 STA IFR 

6D56: A0 00 74 LDY #$00 ;INIT REGISTERS

6D58: A2 04 75 LDX #$04

6D5A: A5 FB 76 LDA OUTPRT ;CHECK FOR END OF

DATA FILE

6D5C: C5 FD 77 CMP ENDPTR

6DSE: D0 20 78 BCC CONT6 ;IF NOT THEN

CONTINUE

6D60: A5 FC 79 LDA OUTPTR+1 ;CHECK HIGH ADDRESS

ALSO

6D62: C5 FE 80 CMP ENDPRT+1

6D64: D0 1A 81 BCC CONT6 ;IF NOT THEN

CONTINUE

6D66: A9 00 82 LDA #$00 ;IF END, TURN EVERY-

THING OFF

6D68: 8D 20 C4 83 STA DURPHON ;STORE PAUSE

PHONEME

6D68: A9 70 84 LDA #$70 ;ZERO AMPLITUDE

 

A-20

APPENDIX F Assembly Language Program Listings (continued)

 

6D6D: 8D 23 C4 85 STA CTTRAMP

6D70: A9 00 86 LDA #$00 ;CLEAR BUSY FLAG

6D72: 85 FF 87 STA BUSY 

6D74: A9 02 88 LDA #$02 ;CLEAR INTERRUPT

ENABLE

6D76: 8D 0E C4 89 STA IER ;IN 6522

6D79: 68 90 RET PLA ;RESTORE REGISTERS

6D7A: A8 91 TAY

6D7B: 68 92 PLA

6D7C: AA 93 TAX

6D7D: A5 45 94 LDA $45

6D7F: 40 95 RTI ;RETURN FROM

INTERRUPT

96 * 

6D80: B1 FB 97 CONT6 LDA (OUTPTR),Y ;GET DATA

6D82: 9D 20 C4 98 STA BASE,X ;STORE IN SPEECH

CHIP

6D8F: E6 FB 99 INC OUTPTR ;NEXT DATA

6D87: D0 02 100 BNE CONT7

6D89: E6 FC 101 INC OUTPTR+1

102 * 

6D88: CA 103 CONT7 DEX ;NEXT REGISTER

6D8C: E0 FF 104 CPX #$FF ;LAST REGISTER?

6D8E: D0 F0 105 BNE CONT6 ;NO, CONTINUE

6D90: F0 E7 106 BEQ RET ;YES, RETURN

 

 

 

 

ADDEMDUM

 

Page A-15, SPEECH-COMPOSITE DRIVER update as follows:

 

INSERT 

After line 16: DDRB EQU $C402 

DDRA EQU $C403 

After line 29: LDA #$00

STA DDRA

STA DDRB 

After line 89: LDA #SFF 

STA DDRA

LDA #$07 

STA DDRB 